
#include "stdio.h"
#include "stdlib.h"

#include "systick.h"
#include "remote.h"

RemoteInfo_union Remote;
RemoteRecieve_struct RemoteRecieve;

bool LevelAnalysis;



void vremoteInit(void){
	rcu_periph_clock_enable(REMOTE_RCU_GPIOx);
	rcu_periph_clock_enable(RCU_CFGCMP);
	gpio_output_options_set(REMOTE_GPIOx,GPIO_OTYPE_PP,GPIO_OSPEED_10MHZ,REMOTE_GPIO_PINx);
	gpio_mode_set(REMOTE_GPIOx, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP,REMOTE_GPIO_PINx);
	
	nvic_irq_enable(EXTI0_1_IRQn, 2U, 0U);
	syscfg_exti_line_config(EXTI_SOURCE_GPIOB, EXTI_SOURCE_PIN0);
	exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_BOTH);
	exti_interrupt_flag_clear(EXTI_0);
	
}

void EXTI0_1_IRQHandler(void)
{
	if (exti_interrupt_flag_get(EXTI_0) == SET)
	{
		if(SET == gpio_input_bit_get(REMOTE_GPIOx,REMOTE_GPIO_PINx)){
			
			RemoteRecieve.remoteRecieveTime=0;
			LevelAnalysis=TRUE;
		}else{
			LevelAnalysis=FALSE;
			if((RemoteRecieve.remoteRecieveTime>6)&&\
				 (RemoteRecieve.remoteRecieveTime<12))
			{
				RemoteRecieve.StartSignal=TRUE;
				RemoteRecieve.remoteRecieveByteCount++;
			}
			
			if(RemoteRecieve.StartSignal)
			{
				//1->0 0   
				if((RemoteRecieve.remoteRecieveTime>2)&&\
					 (RemoteRecieve.remoteRecieveTime<5))
				{
					
				}
				//1->0 1
				if((RemoteRecieve.remoteRecieveTime>7)&&\
					 (RemoteRecieve.remoteRecieveTime<11))
				{
					
				}
			
			}

			
		}
		
	}
	exti_interrupt_flag_clear(EXTI_0);
	exti_interrupt_flag_clear(EXTI_1);
}
